import facecat from "facecat"
import facecat_ws from "facecat_ws"
let clickIndex = -1;
let tick = 0;
let gList = new facecat.FCGrid();

let checkPaint = function () {
    if (clickIndex != -1) {
        tick -= 20;
        if (tick <= 0) {
            tick = 0;
            clickIndex = -1;
        }
        facecat.invalidate(gPaint);
    }
};

setInterval(checkPaint, 30);

/*
* 点击方法
* view:视图
* firstTouch:是否第一次触摸
* firstPoint:第一次触摸的坐标
* secondTouch:是否第二次触摸
* secondPoint:第二次触摸的坐标
* clicks:点击次数
*/
let onClick = function (view, firstTouch, firstPoint, secondTouch, secondPoint, clicks) {
    facecat.onClickDefault(view, firstTouch, firstPoint, secondTouch, secondPoint, clicks);
};

/*
* 触摸开始方法
* view:视图
* firstTouch:是否第一次触摸
* firstPoint:第一次触摸的坐标
* secondTouch:是否第二次触摸
* secondPoint:第二次触摸的坐标
*/
let onTouchBegin = function (view, firstTouch, firstPoint, secondTouch, secondPoint) {
    facecat.onTouchBeginDefault(view, firstTouch, firstPoint, secondTouch, secondPoint);	
};

/*
* 触摸移动方法
* view:视图
* firstTouch:是否第一次触摸
* firstPoint:第一次触摸的坐标
* secondTouch:是否第二次触摸
* secondPoint:第二次触摸的坐标
*/
let onTouchMove = function (view, firstTouch, firstPoint, secondTouch, secondPoint) {
	facecat.onTouchMoveDefault(view, firstTouch, firstPoint, secondTouch, secondPoint);	
};

/*
* 触摸结束方法
* view:视图
* firstTouch:是否第一次触摸
* firstPoint:第一次触摸的坐标
* secondTouch:是否第二次触摸
* secondPoint:第二次触摸的坐标
*/
let onTouchEnd = function (view, firstTouch, firstPoint, secondTouch, secondPoint) {
	facecat.onTouchEndDefault(view, firstTouch, firstPoint, secondTouch, secondPoint);	
};

let gPaint = new facecat.FCPaint();
let that = null;

// index.js
// 获取应用实例
const app = getApp()
Page({
    data: {
        canvasWidth:0,
        canvasHeight:0,
        facecatStyle:"",
        facecatContent:"",
        facecatFocus:false
      },
      bindInputChange: function(e) {  
        if(gPaint.editingTextBox){
            gPaint.editingTextBox.text = e.detail.value;
            facecat.invalidateView(gPaint.editingTextBox);
            gPaint.editingTextBox = null;
            gPaint.app.setData({
                facecatStyle: "position:absolute;left:0px;top:0px;width:0px;height:0px;display:none;", 
                facecatFocus:false,
                facecatContent:""
             })
        }
      },
  touchStartCanvas: function (e) {
    facecat_ws.handleTouchStart(gPaint, e, onTouchBegin);
  },touchMoveCanvas: function (e) {
    facecat_ws.handleTouchMove(gPaint, e, onTouchMove);
  },touchEndCanvas: function (e) {
    facecat_ws.handleTouchEnd(gPaint, e, onTouchEnd, onClick);
  },
  onLoad() {
      that = this;
    wx.createSelectorQuery().select('#myCanvas').fields({ node: true, size: true }).exec((cres) => {       
        wx.getSystemInfo({
            success: function(res) {
                that.setData({
                    canvasWidth: res.windowWidth,  
                    canvasHeight: res.windowHeight
                 })
                cres[0].width = res.windowWidth;
                cres[0].height = res.windowHeight;
            }
        });   
        facecat_ws.scaleCanvas(gPaint, cres);
        /*
        * 重绘背景的实现方法
        * view:视图
        * paint:绘图对象
        * clipRect:裁剪区域
        */
        gPaint.onPaint = function (view, paint, clipRect) {
            facecat.onPaintDefault(view, paint, clipRect);
        };            
        /*
        * 重绘边框的实现方法
        * view:视图
        * paint:绘图对象
        * clipRect:裁剪区域
        */
        gPaint.onPaintBorder = function (view, paint, clipRect) {
            facecat.onPaintBorderDefault(view, paint, clipRect);
            if (paint.isMobile && tick > 0 && clickIndex > 1) {
                let row = gList.rows[clickIndex];
                let cell = row.cells[0];
                let dFont = "Default,14";
                let gSize = paint.textSize(cell.text4, dFont);
                let lineCount = 1;
                if (gList.size.cx > 40) {
                    lineCount = parseInt(gSize.cx / (gList.size.cx - 40)) + 1;
                }
                let bounds = new facecat.FCRect(0, clickIndex * gList.rowHeight + gList.headerHeight - gList.scrollV, gList.size.cx, (clickIndex + 1) * gList.rowHeight + gList.headerHeight - gList.scrollV);
                if (bounds.top < gList.size.cy / 2) {
                    bounds.top += gList.rowHeight;
                    bounds.bottom += gList.rowHeight;
                    if (bounds.bottom - bounds.top - 30 < gSize.cy * lineCount) {
                        bounds.bottom = bounds.top + 30 + gSize.cy * lineCount;
                    }
                } else {
                    bounds.top -= gList.rowHeight;
                    bounds.bottom -= gList.rowHeight;
                    if (bounds.bottom - bounds.top - 30 < gSize.cy * lineCount) {
                        bounds.top = bounds.bottom - 30 - gSize.cy * lineCount;
                    }
                }
                bounds.left += 10;
                bounds.right -= 10;
                let textColor = "rgb(200,200,200)";
                if (paint.defaultUIStyle == "light") {
                    paint.fillRoundRect("rgba(240,240,240,200)", bounds.left, bounds.top, bounds.right, bounds.bottom, 8);
                    paint.drawRoundRect("rgb(175,175,175", 1, 0, bounds.left, bounds.top, bounds.right, bounds.bottom, 8);
                    textColor = "rgb(50,50,50)";
                } else {
                    paint.fillRoundRect("rgba(32,36,38,200)", bounds.left, bounds.top, bounds.right, bounds.bottom, 8);
                    paint.drawRoundRect("rgb(75,75,75", 1, 0, bounds.left, bounds.top, bounds.right, bounds.bottom, 8);
                    textColor = "rgb(200,200,200)";
                }
                let drawText = "";
                let dTop = bounds.top + 10;
                let pos = 0;
                let textLength = cell.text4.length;
                while (pos < textLength) {
                    drawText += cell.text4[pos];
                    let dSize = paint.textSize(drawText, dFont);
                    if (dSize.cx > bounds.right - 40 || pos == textLength - 1) {
                        paint.drawText(drawText, textColor, dFont, bounds.left + 10, dTop);
                        drawText = "";
                        dTop += dSize.cy + 5;
                    }
                    pos++;
                }
            }
        };
        /*
        * 更新布局的实现方法
        * views:视图集合
        */
        gPaint.onUpdateView = function (views) {
            facecat.updateViewDefault(views);
        }
        /*
        * 单元格的点击方法
        * grid: 表格
        * row: 行
        * column: 列
        * cell: 单元格
        * firstTouch:是否第一次触摸
        * firstPoint:第一次触摸的坐标
        * secondTouch:是否第二次触摸
        * secondPoint:第二次触摸的坐标
        */
       gPaint.onClickGridCell = function (grid, row, column, cell, firstTouch, firstPoint, secondTouch, secondPoint) {
            let rate = 1 - 210 / grid.size.cx;
            if (gPaint.isMobile) {
                rate = 0.5;
            }
            if (cell.text3 == "关于") {
                //window.location.href = cell.link;
            } else {
                if (firstPoint.x >= grid.size.cx * rate + cell.diffX && firstPoint.x <= grid.size.cx * rate + cell.diffX * 2) {
                    if (row.index < 2) {

                    } else {
                        //window.location.href = cell.link2;
                    }
                } else if (firstPoint.x >= grid.size.cx * rate && firstPoint.x <= grid.size.cx * rate + cell.diffX) {
                    if (row.index < 2) {

                    } else {
                        //window.location.href = cell.link;
                    }
                } else {
                    clickIndex = row.index;
                    tick = 720;
                }
            }
        };

        /*
        * 列头的点击方法
        * grid: 表格
        * column: 列
        * firstTouch:是否第一次触摸
        * firstPoint:第一次触摸的坐标
        * secondTouch:是否第二次触摸
        * secondPoint:第二次触摸的坐标
        */
        gPaint.onClickGridColumn = function (grid, column, firstTouch, firstPoint, secondTouch, secondPoint) {
            if (firstPoint.x > grid.size.cx - 50 && grid.scrollV < 150) {
                if (grid.paint.defaultUIStyle == "dark") {
                    grid.paint.defaultUIStyle = "light";
                } else {
                    grid.paint.defaultUIStyle = "dark";
                }
                if (gList.paint.defaultUIStyle == "dark") {
                    gList.backColor = "rgb(0,0,0)";
                    gList.borderColor = null;
                    gList.textColor = "rgb(255,255,255)";
                    gList.scrollBarColor = "rgb(100,100,100)";
                } else if (gList.paint.defaultUIStyle == "light") {
                    gList.backColor = "rgb(230,230,230)";
                    gList.borderColor = null;
                    gList.textColor = "rgb(0,0,0)";
                    gList.scrollBarColor = "rgb(200,200,200)";
                }
                facecat.invalidate(gPaint);
            }
        };
        /*
        * 绘制单元格
        * grid:表格
        * row:行
        * column:列
        * cell:单元格
        * paint:绘图对象
        * left:左侧坐标
        * top:上方坐标
        * right:右侧坐标
        * bottom:下方坐标
        */
       gPaint.onPaintGridCell = function (grid, row, column, cell, paint, left, top, right, bottom) {
            let width = right - left, height = bottom - top;
            let colors = new Array();
            colors.push("rgb(170, 178, 189)");
            colors.push("rgb(140, 192, 81)");
            colors.push("rgb(59, 174, 218)");
            colors.push("rgb(219, 68, 83)");
            colors.push("rgb(246, 187, 67)");
            colors.push("rgb(216, 112, 173)");
            colors.push("rgb(150, 123, 220)");
            colors.push("rgb(75, 137, 220)");
            colors.push("rgb(185, 63, 150)");
            colors.push("rgb(233, 87, 62)");
            if (row.index < 2) {
                if (row.index == 1) {
                    let eR = grid.rowHeight * 1.5;
                    if (grid.scrollV > 0) {
                        eR -= grid.scrollV / 3;
                    }
                    var text1s = new Array();
                    var text2s = new Array();
                    text1s.push("使用语言");
                    text2s.push("15");
                    text1s.push("支持平台");
                    text2s.push("6");
                    text1s.push("独立版本");
                    text2s.push("36");
                    if (!gPaint.isMobile && width > 500) {
                        text1s.push("生态工具");
                        text2s.push("5");
                        text1s.push("扩展框架");
                        text2s.push("27");
                        text1s.push("基础软件");
                        text2s.push("10");
                        text1s.push("原创率");
                        text2s.push("99%");
                        text1s.push("研发年数");
                        text2s.push("3.5");
                    }
                    let tSub = 0;
                    let tLeft = left + (right - left - text1s.length * (eR + tSub)) / 2;
                    let avgTick = 720 / text1s.length;
                    let nowIndex = parseInt((720 - tick) / avgTick);
                    for (let i = 0; i < text1s.length; i++) {
                        let font1 = "Default,14";
                        let font2 = "Default,35";
                        if (grid.scrollV > 0) {
                            font2 = "Default," + (35 - grid.scrollV / 5).toString();
                            font1 = "Default," + (14 - grid.scrollV / 10).toString();
                        }
                        let tSize1 = paint.textSize(text1s[i], font1);
                        let tSize2 = paint.textSize(text2s[i], font2);
                        let firstRect = new facecat.FCRect(tLeft, top - eR / 2 - 10, tLeft + eR, top + eR / 2 - 10);
                        firstRect.left += 10;
                        firstRect.top += 10;
                        firstRect.right -= 10;
                        firstRect.bottom -= 10;
                        let bColor = "rgb(42,138,195)";
                        let bColor2 = "rgba(42,138,195, 200)";
                        let corner = 10;
                        if (!gPaint.isMobile && width > 500) {
                            corner = 0;
                        }
                        if (text1s.length > 3) {
                            bColor = colors[i % colors.length];
                            bColor2 = bColor;
                        }
                        if (tick > 0 && clickIndex <= 1 &&  nowIndex == i && paint.defaultUIStyle == "dark") {
                            let eR = 10;
                            paint.fillEllipse(bColor, firstRect.left + (firstRect.right - firstRect.left) / 3 - eR, firstRect.top - eR - 3, firstRect.left + (firstRect.right - firstRect.left) / 3 + eR, firstRect.top + eR - 3);
                            paint.fillEllipse(bColor, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 - eR, firstRect.top - eR - 3, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + eR, firstRect.top + eR - 3);
                            eR = 5;
                            paint.fillEllipse("rgb(200,200,200)", firstRect.left + (firstRect.right - firstRect.left) / 3 - eR, firstRect.top - eR - 3, firstRect.left + (firstRect.right - firstRect.left) / 3 + eR, firstRect.top + eR - 3);
                            paint.fillEllipse("rgb(200,200,200)", firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 - eR, firstRect.top - eR - 3, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + eR, firstRect.top + eR - 3);
                            eR = 3;
                            paint.fillEllipse("rgb(0,0,0)", firstRect.left + (firstRect.right - firstRect.left) / 3 - eR, firstRect.top - eR - 5, firstRect.left + (firstRect.right - firstRect.left) / 3 + eR, firstRect.top + eR - 5);
                            paint.fillEllipse("rgb(0,0,0)", firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 - eR, firstRect.top - eR - 5, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + eR, firstRect.top + eR - 5);
                            paint.beginPath();
                            paint.addLine(firstRect.left + (firstRect.right - firstRect.left) * 2 / 3, firstRect.bottom, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3, firstRect.bottom + 10);
                            paint.addLine(firstRect.left + (firstRect.right - firstRect.left) * 2 / 3, firstRect.bottom + 10, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + 10, firstRect.bottom + 10);
                            paint.drawPath(bColor, 4, 0);
                            paint.closePath();
                            eR = 3;
                            paint.fillEllipse(bColor, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + 10 - eR, firstRect.bottom + 10 - eR, firstRect.left + (firstRect.right - firstRect.left) * 2 / 3 + 10 + eR, firstRect.bottom + 10 + eR);
                            paint.beginPath();
                            paint.addLine(firstRect.left + (firstRect.right - firstRect.left) / 3, firstRect.bottom, firstRect.left + (firstRect.right - firstRect.left) / 3, firstRect.bottom + 10);
                            paint.addLine(firstRect.left + (firstRect.right - firstRect.left) / 3, firstRect.bottom + 10, firstRect.left + (firstRect.right - firstRect.left) / 3 - 10, firstRect.bottom + 10);
                            paint.drawPath(bColor, 4, 0);
                            paint.closePath();
                            paint.fillEllipse(bColor, firstRect.left + (firstRect.right - firstRect.left) / 3 - 10 - eR, firstRect.bottom + 10 - eR, firstRect.left + (firstRect.right - firstRect.left) / 3 - 10 + eR, firstRect.bottom + 10 + eR);
                            if (grid.paint.defaultUIStyle == "dark") {
                                paint.fillRoundRect("rgb(21,24,28)", firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                if (corner == 0) {
                                    paint.drawRoundRect("rgb(50,50,50)", 1, 0, firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                }
                                paint.drawText(text1s[i], "rgb(150,150,150)", font1, firstRect.left + (firstRect.right - firstRect.left - tSize1.cx) / 2, firstRect.top + 20 - tSize1.cy / 2);
                                paint.drawText(text2s[i], "rgb(200,200,200)", font2, firstRect.left + (firstRect.right - firstRect.left - tSize2.cx) / 2, firstRect.top + (firstRect.bottom - firstRect.top - tSize2.cy) / 2);
                            } else {
                                paint.fillRoundRect("rgb(255,255,255)", firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                paint.drawRoundRect("rgb(200,200,200)", 1, 0, firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                paint.drawText(text1s[i], "rgb(100,100,100)", font1, firstRect.left + (firstRect.right - firstRect.left - tSize1.cx) / 2, firstRect.top + 20 - tSize1.cy / 2);
                                paint.drawText(text2s[i], "rgb(50,50,50)", font2, firstRect.left + (firstRect.right - firstRect.left - tSize2.cx) / 2, firstRect.top + (firstRect.bottom - firstRect.top - tSize2.cy) / 2);
                            }
                            let xSub = 0;
                            if (paint.isMobile) {
                                xSub += ((720 - tick) - parseInt(avgTick * nowIndex)) / 24;
                            } else {
                                xSub += ((720 - tick) - parseInt(avgTick * nowIndex)) / 12;
                            }
                            paint.beginPath();
                            paint.addLine(firstRect.left, firstRect.top + 20, firstRect.left + 10, firstRect.top + 30);
                            paint.addLine(firstRect.left + 10, firstRect.top + 30, firstRect.left + 10 + xSub, firstRect.top + 10);
                            paint.drawPath(bColor, 4, 0);
                            paint.closePath();
                            eR = 6;
                            paint.fillEllipse(bColor, firstRect.left + 10 - eR + xSub, firstRect.top + 10 - eR, firstRect.left + 10 + eR + xSub, firstRect.top + 10 + eR);
                            paint.beginPath();
                            paint.addLine(firstRect.right, firstRect.top + 30, firstRect.right - 10, firstRect.top + 30);
                            paint.addLine(firstRect.right - 10, firstRect.top + 30, firstRect.right - 20 + xSub, firstRect.top + 10);
                            paint.drawPath(bColor, 4, 0);
                            paint.closePath();
                            paint.fillEllipse(bColor, firstRect.right - 20 - eR + xSub, firstRect.top + 10 - eR, firstRect.right - 20 + eR + xSub, firstRect.top + 10 + eR);
                        } else {
                            if (grid.paint.defaultUIStyle == "dark") {
                                paint.fillRoundRect("rgb(21,24,28)", firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                if (corner == 0) {
                                    paint.drawRoundRect("rgb(50,50,50)", 1, 0, firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                }
                                paint.drawText(text1s[i], "rgb(150,150,150)", font1, firstRect.left + (firstRect.right - firstRect.left - tSize1.cx) / 2, firstRect.top + 20 - tSize1.cy / 2);
                                paint.drawText(text2s[i], "rgb(200,200,200)", font2, firstRect.left + (firstRect.right - firstRect.left - tSize2.cx) / 2, firstRect.top + (firstRect.bottom - firstRect.top - tSize2.cy) / 2);
                            } else {
                                paint.fillRoundRect("rgb(255,255,255)", firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                paint.drawRoundRect("rgb(200,200,200)", 1, 0, firstRect.left, firstRect.top, firstRect.right, firstRect.bottom, corner);
                                paint.drawText(text1s[i], "rgb(100,100,100)", font1, firstRect.left + (firstRect.right - firstRect.left - tSize1.cx) / 2, firstRect.top + 20 - tSize1.cy / 2);
                                paint.drawText(text2s[i], "rgb(50,50,50)", font2, firstRect.left + (firstRect.right - firstRect.left - tSize2.cx) / 2, firstRect.top + (firstRect.bottom - firstRect.top - tSize2.cy) / 2);
                            }
                        }
                        if (text1s.length > 3) {
                            paint.fillRoundRect(colors[i % colors.length], firstRect.left + (firstRect.right - firstRect.left - 25 + grid.scrollV / 10) / 2, firstRect.bottom - 15 + grid.scrollV / 20, firstRect.left + (firstRect.right - firstRect.left + 25 - grid.scrollV / 10) / 2, firstRect.bottom - 10, 2);
                        } else {
                            paint.fillRoundRect("rgb(42,138,195)", firstRect.left + (firstRect.right - firstRect.left - 25 + grid.scrollV / 10) / 2, firstRect.bottom - 15 + grid.scrollV / 20, firstRect.left + (firstRect.right - firstRect.left + 25 - grid.scrollV / 10) / 2, firstRect.bottom - 10, 2);
                        }
                        if (tick > 0 && clickIndex <= 1) {
                            let overTimes = tick;
                            if (overTimes > 360) {
                                overTimes -= 360;
                            }
                            let dRect = new facecat.FCRect(firstRect.left, firstRect.top, firstRect.right, firstRect.bottom);
                            let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top) / 2;
                            let dInterval = 20;
                            paint.drawRect(bColor, 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                            if (overTimes < 90) {
                                let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                                let eSize = overTimes * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                            }
                            else if (overTimes < 180) {
                                let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                            }
                            else if (overTimes < 270) {
                                let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                            }
                            else if (overTimes < 360) {
                                let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                                let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                                paint.drawLine(bColor2, 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                            }
                        }
                        tLeft += eR + tSub;
                    }
                    let text1 = "产品列表";
                    let font3 = "Default,14";
                    let tSize1 = paint.textSize(text1, font3);
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.drawText(text1, "rgb(150,150,150)", font3, left + (right - left - tSize1.cx) / 2, bottom - tSize1.cy - tSize1.cy / 2);
                    } else {
                        paint.drawText(text1, "rgb(50,50,50)", font3, left + (right - left - tSize1.cx) / 2, bottom - tSize1.cy - tSize1.cy / 2);
                    }
                }
            } else {
                if (!gPaint.isMobile && width > 500) {
                    let dColor = "rgba(50,50,50)";
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.fillRoundRect("rgb(21,24,28)", left + 14, top + 5, right - 14, bottom - 5, 0);
                    } else {
                        dColor = "rgb(200,200,200)";
                        paint.fillRoundRect("rgb(240,240,240)", left + 14, top + 5, right - 14, bottom - 5, 0);
                    }
                    paint.drawRoundRect(dColor, 1, 0, left + 14, top + 5, right - 14, bottom - 5, 0)
                } else {
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.fillRoundRect("rgb(21,24,28)", left + 14, top + 5, right - 14, bottom - 5, 10);
                    } else {
                        paint.fillRoundRect("rgb(240,240,240)", left + 14, top + 5, right - 14, bottom - 5, 10);
                    }
                }
                let baseUpper = cell.text1;
                if (cell.text3 == "关于" && !gPaint.isMobile && width > 600) {
                    baseUpper = "上海卷卷猫信息技术有限公司 版权所有@2023 " + baseUpper;
                }
                let font1 = "Default,15";
                let font2 = "Default,12";
                let font3 = "Default,14";
                let tSize = paint.textSize(baseUpper, font1);
                if (cell.text3 == "关于") {
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.drawText(baseUpper, "rgb(200,200,200)", font1, left + (width - tSize.cx) / 2, top + (height - tSize.cy) / 2); 
                    } else {
                        paint.drawText(baseUpper, "rgb(50,50,50)", font1, left + (width - tSize.cx) / 2, top + (height - tSize.cy) / 2); 
                    }
                    return;
                }
                let str = "A" + tSize.cy;
                if (str == "ANaN") {
                    tSize.cy = 12;
                }
                let strVolume = cell.text3;
                let strPrice = cell.text4;
                let tSize2 = paint.textSize(strVolume, font2);
                str = "A" + tSize2.cy;
                if (str == "ANaN") {
                    tSize2.cy = 12;
                }
                if (grid.paint.defaultUIStyle == "dark") {
                    paint.drawText(baseUpper, "rgb(200,200,200)", font1, left + 26, top + height / 2 - tSize2.cy - tSize.cy / 2);
                    paint.drawText(strVolume, "rgb(200,200,200)", font2, left + 39, top + height / 2 + tSize2.cy + 3 - tSize2.cy / 2);
                } else {
                    paint.drawText(baseUpper, "rgb(50,50,50)", font1, left + 26, top + height / 2 - tSize2.cy - tSize.cy / 2);
                    paint.drawText(strVolume, "rgb(50,50,50)", font2, left + 39, top + height / 2 + tSize2.cy + 3 - tSize2.cy / 2);
                }
                let drawColor = "rgb(255,0,0)";
                paint.fillEllipse(colors[Number(cell.linkType) - 1], left + 26, top + height / 2 + 3 + tSize2.cy - 4, left + 34, top + height / 2 + 3 + tSize2.cy + 4);
                let tSize5 = paint.textSize("100000.00%", font3);
                str = "A" + tSize5.cy;
                if (str == "ANaN") {
                    tSize5.cy = 12;
                }
                let rate2 = 1 - 210 / width;
                if (gPaint.isMobile) {
                    rate2 = 0.5;
                }
                let colRect = new facecat.FCRect(left + width * rate2 + 5, top + height / 2 - tSize5.cy - 4, left + width * rate2 + 5 + tSize5.cx, top + height / 2 + tSize5.cy + 3);
                if (!gPaint.isMobile && width > 500) {
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.drawTextAutoEllipsis(strPrice, "rgb(200,200,200)", font3, left + 200 + 30, top + height / 2 - tSize5.cy / 2, width - 260, left + 230 + 5 + tSize5.cy - tSize5.cy / 2);
                    } else {
                        paint.drawTextAutoEllipsis(strPrice, "rgb(50,50,50)", font3, left + 200 + 30, top + height / 2 - tSize5.cy / 2, width - 260, left + 230 + 5 + tSize5.cy - tSize5.cy / 2);
                    }
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.drawLine("rgb(50,50,50)", 1, 0, width - 240, top + 5, width - 240, bottom - 5);
                        paint.drawLine("rgb(50,50,50)", 1, 0, left + 210, top + 5, left + 210, bottom - 5);
                    } else {
                        paint.drawLine("rgb(200,200,200)", 1, 0, width - 240, top + 5, width - 240, bottom - 5);
                        paint.drawLine("rgb(200,200,200)", 1, 0, left + 210, top + 5, left + 210, bottom - 5);
                    }
                    //paint.drawLine("rgb(50,50,50)", 1, 0, left + 200 + 5 - 10, top, left + 200 + 5 - 10, bottom);
                    //paint.drawLine("rgb(50,50,50)", 1, 0, width - 220, top, width - 220, bottom);
                }
                if (grid.paint.defaultUIStyle == "dark") {
                    paint.fillRoundRect("rgb(32,36,38)", colRect.left, top + 15, colRect.right, bottom - 15, 5);
                    //paint.drawRoundRect("rgb(75,75,75)", 1, 0, colRect.left, colRect.top, colRect.right, colRect.bottom, 10);
                } else {
                    paint.fillRoundRect("rgb(255,255,255)", colRect.left, top + 15, colRect.right, bottom - 15, 5);
                    paint.drawRoundRect("rgb(200,200,200)", 1, 0, colRect.left, top + 15, colRect.right, bottom - 15, 5);
                }
                let diffX = colRect.right - colRect.left + 10;
                if (cell.linkText2.length > 0) {
                    if (grid.paint.defaultUIStyle == "dark") {
                        paint.fillRoundRect("rgb(32,36,38)", colRect.left + diffX, top + 15, colRect.right + diffX, bottom - 15, 5);
                        //paint.drawRoundRect("rgb(75,75,75)", 1, 0, colRect.left + diffX, colRect.top, colRect.right + diffX, colRect.bottom, 4);
                    } else {
                        paint.fillRoundRect("rgb(255,255,255)", colRect.left + diffX, top + 15, colRect.right + diffX, bottom - 15, 5);
                        paint.drawRoundRect("rgb(200,200,200)", 1, 0, colRect.left + diffX, top + 15, colRect.right + diffX, bottom - 15, 5);
                    }
                }
                cell.diffX = diffX;
                let tSize4 = paint.textSize(cell.linkText1, font3);
                let tSize6 = paint.textSize(cell.linkText2, font3);
                let offsetRight = 15;
                if (cell.image) {
                    if (!cell.initImage) {
                        cell.initImage = true;
                        let bg = paint.canvas.createImage();
                        bg.src = cell.image;
                        bg.onload = () => {
                            cell.image2 = bg;
                            facecat.invalidateView(grid);
                        }
                    }
                }
                if (grid.paint.defaultUIStyle == "dark") {
                    paint.drawText(cell.linkText1, "rgb(200,200,200)", font3, left + width * rate2 + 5 + tSize5.cx / 2 - tSize4.cx / 2 - 15, top + height / 2 - tSize4.cy / 2);
                } else {
                    paint.drawText(cell.linkText1, "rgb(50,50,50)", font3, left + width * rate2 + 5 + tSize5.cx / 2 - tSize4.cx / 2 - 15, top + height / 2 - tSize4.cy / 2);
                }
                let tLeft1 = left + width * rate2 + 5 + tSize5.cx / 2 - tSize4.cx / 2 - 15 + tSize4.cx + 10;
                let tLeftRect = new facecat.FCRect(tLeft1 + 2, top + height / 2 - 10, tLeft1 + 20 - 2, top + height / 2 + 10);
                if (grid.paint.defaultUIStyle == "dark") {
                    paint.drawRect("rgb(75,75,75)", 1, 0, tLeftRect.left, tLeftRect.top, tLeftRect.right, tLeftRect.bottom);
                    paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4);
                    paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2);
                    paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4);
                } else {
                    paint.drawRect("rgb(175,175,175)", 1, 0, tLeftRect.left, tLeftRect.top, tLeftRect.right, tLeftRect.bottom);
                    paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4);
                    paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2);
                    paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4);
                }
                if (cell.linkText2.length > 0) {
                    if (cell.image2) {
                        let tLeft = left + width * rate2 + 5 + tSize5.cx / 2 - tSize6.cx / 2 + diffX - offsetRight;
                        if (grid.paint.defaultUIStyle == "dark") {
                            paint.drawText(cell.linkText2, "rgb(200,200,200)", font3, tLeft, top + height / 2 - tSize4.cy / 2);
                        } else {
                            paint.drawText(cell.linkText2, "rgb(50,50,50)", font3, tLeft, top + height / 2 - tSize4.cy / 2);
                        }
                        paint.drawImage(cell.image2, tLeft + tSize6.cx + 10, top + height / 2 - 12, tLeft + tSize6.cx + 34, top + height / 2 + 12);
                    } else {
                        let tLeft = left + width * rate2 + 5 + tSize5.cx / 2 - tSize6.cx / 2 + diffX - offsetRight;
                        if (grid.paint.defaultUIStyle == "dark") {
                            paint.drawText(cell.linkText2, "rgb(200,200,200)", font3, tLeft, top + height / 2 - tSize4.cy / 2);
                        } else {
                            paint.drawText(cell.linkText2, "rgb(50,50,50)", font3, tLeft, top + height / 2 - tSize4.cy / 2);
                        }
                        let tLeft1 = tLeft + tSize6.cx + 10;
                        tLeftRect = new facecat.FCRect(tLeft1 + 2, top + height / 2 - 10, tLeft1 + 20 - 2, top + height / 2 + 10);
                        if (grid.paint.defaultUIStyle == "dark") {
                            paint.drawRect("rgb(75,75,75)", 1, 0, tLeftRect.left, tLeftRect.top, tLeftRect.right, tLeftRect.bottom);
                            paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4);
                            paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2);
                            paint.drawLine("rgb(75,75,75)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4);
                        } else {
                            paint.drawRect("rgb(175,175,175)", 1, 0, tLeftRect.left, tLeftRect.top, tLeftRect.right, tLeftRect.bottom);
                            paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 4);
                            paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) / 2);
                            paint.drawLine("rgb(175,175,175)", 1, 0, tLeftRect.left + 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4, tLeftRect.right - 5, tLeftRect.top + (tLeftRect.bottom - tLeftRect.top) * 3 / 4);
                        }
                    }
                }
                if (tick > 0 && clickIndex == row.index) {
                    let overTimes = tick;
                    if (overTimes > 360) {
                        overTimes -= 360;
                    }
                    let dRect = new facecat.FCRect(left + 14, top + 5, right - 14, bottom - 5);
                    let dWidth = Math.min(dRect.right - dRect.left, dRect.bottom - dRect.top);
                    let dInterval = 20;
                    let dcWidth = grid.size.cx * 1.5;
                    let dcWidth2 = 400;
                    if (paint.isMobile) {
                        dcWidth = grid.size.cx;
                        dcWidth2 = 200;
                    }
                    let showRect = new facecat.FCRect(-dcWidth2 + dcWidth * (360 - overTimes) / dcWidth2, dRect.top, dcWidth * (360 - overTimes) / dcWidth2, dRect.bottom);
                    if (showRect.left < dRect.left) {
                        showRect.left = dRect.left;
                    }
                    if (showRect.left > dRect.right) {
                        showRect.left = dRect.right;
                    }
                    if (showRect.right > dRect.right) {
                        showRect.right = dRect.right;
                    }
                    paint.fillRect("rgba(42,138,195,100)", showRect.left, showRect.top, showRect.right, showRect.bottom);
                    paint.drawRect("rgb(42,138,195)", 1, 0, dRect.left, dRect.top, dRect.right, dRect.bottom);
                    if (overTimes < 90) {
                        let fSize = (90 - overTimes) * (dWidth - dInterval) / 60;
                        let eSize = overTimes * (dWidth - dInterval) / 60;
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.right - fSize, dRect.top, dRect.right, dRect.top);
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.right, dRect.top, dRect.right, dRect.top + eSize);
                    }
                    else if (overTimes < 180) {
                        let fSize = (90 - (overTimes - 90)) * (dWidth - dInterval) / 60;
                        let eSize = (overTimes - 90) * (dWidth - dInterval) / 60;
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.right, dRect.bottom - fSize, dRect.right, dRect.bottom);
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.right, dRect.bottom, dRect.right - eSize, dRect.bottom);
                    }
                    else if (overTimes < 270) {
                        let fSize = (90 - (overTimes - 180)) * (dWidth - dInterval) / 60;
                        let eSize = (overTimes - 180) * (dWidth - dInterval) / 60;
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.left, dRect.bottom, dRect.left + fSize, dRect.bottom);
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.left, dRect.bottom, dRect.left, dRect.bottom - eSize);
                    }
                    else if (overTimes < 360) {
                        let fSize = (90 - (overTimes - 270)) * (dWidth - dInterval) / 60;
                        let eSize = (overTimes - 270) * (dWidth - dInterval) / 60;
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.left, dRect.top, dRect.left + eSize, dRect.top);
                        paint.drawLine("rgba(42,138,195,200)", 3, 0, dRect.left, dRect.top, dRect.left, dRect.top + fSize);
                    }
                    let t1 = 6, t2 = 24;
                    paint.beginPath();
                    paint.addLine(dRect.left + t1, dRect.top + t2, dRect.left + t1, dRect.top + t1);
                    paint.addLine(dRect.left + t1, dRect.top + t1, dRect.left + t2, dRect.top + t1);
                    paint.drawPath("rgba(42,138,195,200)", 2, 0);
                    paint.closePath();
                    paint.beginPath();
                    paint.addLine(dRect.left + t1, dRect.bottom - t2, dRect.left + t1, dRect.bottom - t1);
                    paint.addLine(dRect.left + t1, dRect.bottom - t1, dRect.left + t2, dRect.bottom - t1);
                    paint.drawPath("rgba(42,138,195,200)", 2, 0);
                    paint.closePath();
                    paint.beginPath();
                    paint.addLine(dRect.right - t1, dRect.top + t2, dRect.right - t1, dRect.top + t1);
                    paint.addLine(dRect.right - t1, dRect.top + t1, dRect.right - t2, dRect.top + t1);
                    paint.drawPath("rgba(42,138,195,200)", 2, 0);
                    paint.closePath();
                    paint.beginPath();
                    paint.addLine(dRect.right - t1, dRect.bottom - t2, dRect.right - t1, dRect.bottom - t1);
                    paint.addLine(dRect.right - t1, dRect.bottom - t1, dRect.right - t2, dRect.bottom - t1);
                    paint.drawPath("rgba(42,138,195,200)", 2, 0);
                    paint.closePath();
                }
            }
        };

        /*
        * 绘制列
        * grid:表格
        * column:列
        * paint:绘图对象
        * left:左侧坐标
        * top:上方坐标
        * right:右侧坐标
        * bottom:下方坐标
        */
       gPaint.onPaintGridColumn = function (grid, column, paint, left, top, right, bottom) {
            if (grid.scrollV < 150) {
                let width = right - left, height = bottom - top;
                let font2 = "Default,16";
                let tSize = paint.textSize("@花卷猫官方", font2);
                if (!column.image2) {
                    let bg = paint.canvas.createImage();
                    bg.src = 'http://www.jjmfc.com/index_files/logo.png';
                    bg.onload = () => {
                        column.image2 = bg;
                        facecat.invalidateView(grid);
                    }
                }
                else {
                    let iR = 20;
                    let imageRect = new facecat.FCRect(20, 30 - iR, 20 + iR * 2, 30 + iR);
                    if (paint.defaultUIStyle == "light") {
                        paint.fillEllipse("rgb(240,240,240)", imageRect.left, imageRect.top, imageRect.right, imageRect.bottom);
                    } else {
                        paint.fillEllipse("rgb(32,36,38)", imageRect.left, imageRect.top, imageRect.right, imageRect.bottom);
                    }

                    if (paint.defaultUIStyle == "light") {
                        paint.drawText("@花卷猫官方", "rgb(0,0,0)", font2, imageRect.right + 10, imageRect.top + (imageRect.bottom - imageRect.top) / 2 - tSize.cy / 2);
                    } else {
                        paint.drawText("@花卷猫官方", "rgb(200,200,200)", font2, imageRect.right + 10, imageRect.top + (imageRect.bottom - imageRect.top) / 2 - tSize.cy / 2);
                    }
                    imageRect.left += 6;
                    imageRect.top += 6;
                    imageRect.right -= 6;
                    imageRect.bottom -= 6;
                    paint.drawImage(column.image2, imageRect.left, imageRect.top, imageRect.right, imageRect.bottom);
                }

                let bR = 10;
                let blackWhiteRect = new facecat.FCRect(grid.size.cx - 25 - bR, 25 - bR, grid.size.cx - 25 + bR, 25 + bR);
                if (paint.defaultUIStyle == "light") {
                    paint.fillEllipse("rgb(175,175,175)", blackWhiteRect.left, blackWhiteRect.top, blackWhiteRect.right, blackWhiteRect.bottom);
                } else {
                    paint.fillEllipse("rgb(70,76,79)", blackWhiteRect.left, blackWhiteRect.top, blackWhiteRect.right, blackWhiteRect.bottom);
                }
                blackWhiteRect.left += bR;
                blackWhiteRect.right += bR;
                paint.fillEllipse(grid.backColor, blackWhiteRect.left, blackWhiteRect.top, blackWhiteRect.right, blackWhiteRect.bottom);
            }
        };
        gPaint.defaultUIStyle = "dark";
        facecat.addView(gList, gPaint);
        if (gList.paint.defaultUIStyle == "dark") {
            gList.backColor = "rgb(0,0,0)";
            gList.borderColor = null;
            gList.textColor = "rgb(255,255,255)";
            gList.scrollBarColor = "rgb(100,100,100)";
        } else if (gList.paint.defaultUIStyle == "light") {
            gList.backColor = "rgb(230,230,230)";
            gList.borderColor = null;
            gList.textColor = "rgb(0,0,0)";
            gList.scrollBarColor = "rgb(200,200,200)";
        }
        gList.dock = "fill";
        gList.location = new facecat.FCPoint(0, 0);
        gList.size = new facecat.FCSize(gPaint.size.cx, gPaint.size.cy);
        gList.visible = true;

        gList.rowHeight = 80;
        gList.headerHeight = 50;
        let gColumn = new facecat.FCGridColumn();
        gColumn.text = "id";
        gColumn.widthStr = "100%";
        gList.columns.push(gColumn);
        if (gList.paint.defaultUIStyle == "dark") {
            gColumn.backColor = "rgb(0,0,0)";
            gColumn.borderColor = "rgb(100,100,100)";
            gColumn.textColor = "rgb(255,255,255)";
        } else if (gList.paint.defaultUIStyle == "light") {
            gColumn.backColor = "rgb(255,255,255)";
            gColumn.borderColor = "rgb(150,150,150)";
            gColumn.textColor = "rgb(0,0,0)";
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "项目简介";
            cell.text2 = "";
            cell.text3 = "国产基础框架和软件";
            cell.text4 = "国产专业基础框架和软件，自研各种跨平台或跨语言的图形、通讯、服务、存储、计算、编程语言、多端互动、人工智能等基础框架，并优先拿自己的框架做自己的行业产品";
            cell.link = "";
            cell.link2 = "http://xhslink.com/sAafvw";
            cell.linkText1 = "描述";
            cell.linkText2 = "视频";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "文档中心";
            cell.text2 = "";
            cell.text3 = "PDF文件";
            cell.text4 = "基础框架的说明文档，包含完整的API解释和说明，已覆盖至少12种语言，用户可以下载对照查看";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "打开";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫终端Windows版";
            cell.text2 = "";
            cell.text3 = "内测 生态工具 原创度99%";
            cell.text4 = "框架可视化设计、代码编辑器、多端互动、浏览器、网页收集、工具箱等，解压直接使用";
            cell.link = "https://mp.weixin.qq.com/s?__biz=Mzg5OTIzODg2Mw==&mid=2247485734&idx=1&sn=f06f0603e911bb90a3ade66140db2a29&chksm=c0571786f7209e90b0f037c8c09cf72110c0bd20537065696c013f915467f77aeca1a215999c#rd";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/windows.png";
            cell.linkType = "2";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫终端MacOS版";
            cell.text2 = "";
            cell.text3 = "内测 生态工具 原创度100%";
            cell.text4 = "框架可视化设计、代码编辑器、多端互动、浏览器、网页收集、工具箱等，打开dmg拖拽到应用中，并到系统偏好设置中添加信任";
            cell.link = "https://mp.weixin.qq.com/s?__biz=Mzg5OTIzODg2Mw==&mid=2247485736&idx=1&sn=5a15db26f189e83a0c5c56177ba9a806&chksm=c0571788f7209e9ef9e61a47f36e49d8b0614ee04eceda09bdacdcf71c99a166a8eaf2b00412#rd";
            cell.link2 = "";
            cell.image = "http://www.jjmfc.com/index_files/macos.png";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.linkType = "2";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫终端安卓版";
            cell.text2 = "";
            cell.text3 = "内测 生态工具 原创度99%";
            cell.text4 = "框架可视化设计、代码编辑器、多端互动、浏览器、网页收集、工具箱等，直接下载安装，每次提示更新后需要手动安装";
            cell.link = "https://mp.weixin.qq.com/s?__biz=Mzg5OTIzODg2Mw==&mid=2247485737&idx=1&sn=5e8cf8839e7f812c56981938c8c9b59f&chksm=c0571789f7209e9fa2dc4645702365101e7f4e06edd0c1d1e1d227befeb1c94907a971f70c3d#rd";
            cell.link2 = "";
            cell.image = "http://www.jjmfc.com/index_files/android.png";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.linkType = "2";
            row.cells.push(cell);
        }


        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫终端iOS版";
            cell.text2 = "";
            cell.text3 = "内测 生态工具 原创度100%";
            cell.text4 = "框架可视化设计、代码编辑器、多端互动、浏览器、网页收集、工具箱等，未上线AppStore，由用户自己用XCode安装";
            cell.link = "";
            cell.link2 = "";
            cell.image = "http://www.jjmfc.com/index_files/apple.png";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.linkType = "2";
            row.cells.push(cell);
        }

if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫多端互动Ubuntu版";
            cell.text2 = "";
            cell.text3 = "内测 生态工具 原创度99%";
            cell.text4 = "只有跨平台互发消息和文件的功能，包含完整的源代码，用户可以自己编译运行";
            cell.link = "";
            cell.link2 = "";
            cell.image = "http://www.jjmfc.com/index_files/linux.png";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.linkType = "2";
            row.cells.push(cell);
        }


        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫C/C++框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的Windows客户端和服务，全部使用C/C++构建，整个界面使用单个窗体重绘，内部元素的鼠标和输入操作均为模拟，另外Ubuntu/Linux、Android/HarmonyOS NDK版本也已基本完成";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Java-Android框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的安卓App，全部使用Java构建，整个界面使用单个View重绘，内部元素的触摸、输入和滚动加速操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/android.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Java-Swing框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度99%";
            cell.text4 = "用于制作要求较高的Linux客户端和服务，全部使用Java构建，整个界面使用单个JPanel重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/java.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫C#框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的Windows客户端和服务，全部使用C#构建，整个界面使用单个Control重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫MacOS C++框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的MacOS客户端，全部使用C/C++构建，整个界面使用单个NSView重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/macos.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫iOS C++框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的iOS-App，全部使用C/C++构建，整个界面使用单个UIView重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/ios.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫WPF框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的WPF客户端，全部使用C#构建，整个界面使用单个Control重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/wpf.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫HarmonyOS框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
            cell.text4 = "用于制作要求较高的鸿蒙原生应用，全部使用Java构建，整个界面使用单个Component重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/hos.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫JavaScript框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
     cell.text4 = "用于制作Html5的前端，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/javascript.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }



        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Python框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度99%";
            cell.text4 = "用于制作Windows和MacOS客户端，使用Python构建，整个界面使用单个窗体重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Rust框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作Html5的前端，使用Wasm技术，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/rust.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Flutter框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作跨平台的前端，使用Dart构建，整个界面使用单个CustomPaint重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/flutter.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }

       if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫SwiftUI框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作MacOS和iOS的原生客户端，使用Swift构建，整个界面使用单个UIView重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
           cell.link = "";
           cell.link2 = "";
           cell.linkText1 = "示例";
             cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/swiftui.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Go框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作Windows客户端，以及wasm的前端，使用Go构建，整个界面使用单个窗体重绘，内部元素的鼠标和输入操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/go.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫TypeScript框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
      cell.text4 = "用于制作前端应用，使用TypeScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/ts.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Vue框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作前端应用，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/vue.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫ReactNative框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作前端应用，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/react.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫UniApp框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作UniApp的前端应用，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/uniapp.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫小程序框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度99%";
            cell.text4 = "用于制作小程序的前端应用，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/mini.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
      if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫R框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 整合型";
            cell.text4 = "用于制作Windows客户端，使用JavaScript来构建界面，可调用R代码";
          cell.link = "";
          cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/r.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Ruby框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
    cell.text4 = "用于制作Windows客户端，使用Ruby构建，整个界面使用单个窗体重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/ruby.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Kotlin框架";
            cell.text2 = "";
            cell.text3 = "综合基础框架 原创度100%";
    cell.text4 = "用于制作要求较高的安卓App，使用Kotlin构建，整个界面使用单个View重绘，内部元素的触摸、输入和滚动加速操作均为模拟";
    cell.link = "";
    cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/kotlin.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Pascal框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作Windows客户端，使用Pascal构建，整个界面使用单个窗体重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
    cell.link = "";
    cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/pascal.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫PHP框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作PHP的前端，使用JavaScript构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/php.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫VB.NET框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作Windows客户端，使用VB.BET构建，整个界面使用单个窗体重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/vb.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Electron框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作客户端，使用Electron构建，整个界面使用单个Cabvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/electron.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Tauri框架";
            cell.text2 = "";
            cell.text3 = "客户端基础框架 原创度100%";
            cell.text4 = "用于制作客户端，使用Tauri构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动操作均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/tauri.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Next.js框架";
            cell.text2 = "";
            cell.text3 = "前端基础框架 原创度100%";
            cell.text4 = "用于制作Next.js的前端，使用JavaScript和React构建，整个界面使用单个Canvas重绘，内部元素的触摸、输入和加速滚动均为模拟";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "示例";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/nextjs.png";
            cell.linkType = "4";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "JavaScript在线示例";
            cell.text2 = "";
            cell.text3 = "组件示例";
            cell.text4 = "JavaScript+Canvas网页展示框架效果，包含十几个组件的示例";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "打开";
            cell.linkText2 = "";
            cell.linkType = "5";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "Rust在线示例";
            cell.text2 = "";
            cell.text3 = "组件示例";
            cell.text4 = "Wasm网页展示框架效果，包含几个重要组件的示例";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "打开";
            cell.linkText2 = "";
            cell.linkType = "5";
            row.cells.push(cell);
        }
if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "Go-Wasm在线示例";
            cell.text2 = "";
            cell.text3 = "组件示例";
            cell.text4 = "Wasm网页展示框架效果，包含几个重要组件的示例";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "打开";
            cell.linkText2 = "";
            cell.linkType = "5";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫长连接框架";
            cell.text2 = "";
            cell.text3 = "后端基础框架 原创度100%";
            cell.text4 = "用于制作多种语言的长连接服务，包含C/C++、C#、Java三个版本";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫多端互动服务端";
            cell.text2 = "";
            cell.text3 = "后端扩展框架 原创度100%";
            cell.text4 = "用于私有部署多端互动服务，使用Java构建";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/java.png";
            cell.linkType = "3";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Python+WebView2";
            cell.text2 = "";
            cell.text3 = "客户端框架 整合型";
            cell.text4 = "用于制作Windows客户端，使用JavaScript构建界面，可调用Python代码";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "6";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Go+WebView2";
            cell.text2 = "";
            cell.text3 = "客户端框架 整合型";
            cell.text4 = "用于制作Windows客户端，使用JavaScript来构建界面，可调用Go代码";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/go.png";
            cell.linkType = "6";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫C#+WebView2";
            cell.text2 = "";
            cell.text3 = "客户端框架 整合型";
            cell.text4 = "用于制作Windows客户端，使用C#构建原生界面，使用JavaScript构建网页栈界面";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "6";
            row.cells.push(cell);
        }
 if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Cpp+WebView2";
            cell.text2 = "";
            cell.text3 = "客户端框架 整合型";
            cell.text4 = "用于制作Windows客户端，使用JavaScript来构建界面，可调用C++代码";
     cell.link = "";
     cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "6";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Html5+ECharts";
            cell.text2 = "";
            cell.text3 = "网页框架 整合型";
            cell.text4 = "用于制作前端程序，使用Html5构建界面，然后嵌入ECharts";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/javascript.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

 if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫C#+HZH";
            cell.text2 = "";
            cell.text3 = "工控框架 整合型";
            cell.text4 = "花卷猫框架和第三方工控框架的融合案例，可以使用设计器来对原生视图进行布局，并扩展个别更多自定义组件";
     cell.link = "";
     cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }
if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫C#+PCHMI";
            cell.text2 = "";
            cell.text3 = "PLC框架 整合型";
            cell.text4 = "花卷猫框架和第三方PLC框架的融合案例，可以使用设计器来对原生视图进行布局，并扩展个别更多自定义组件";
    cell.link = "";
    cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Python+MySQL";
            cell.text2 = "";
            cell.text3 = "数据库工具 整合型";
            cell.text4 = "花卷猫Python框架制作的MySQL数据简易操作工具，暂时只支持Windows端";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }
        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "QStock财经数据";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "终端内置功能，通过第三方的QStock来获取几十种财经数据";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫相似数据框架";
            cell.text2 = "";
            cell.text3 = "行业框架 原创度100%";
            cell.text4 = "使用C++编写，可以对上千个品种的完整K线进行快速的相似比较";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫股票行情框架";
            cell.text2 = "";
            cell.text3 = "行业框架 原创度100%";
            cell.text4 = "服务端有C#和Java两个版本，用于搭建私人的股票行情服务系统，可以选择长连接或短连接";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫期货行情框架";
            cell.text2 = "";
            cell.text3 = "行业框架 原创度100%";
            cell.text4 = "服务端为C#，用于搭建私人的期货行情服务系统，可以选择长连接或短连接";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            row.cells.push(cell);
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫金融公式库";
            cell.text2 = "";
            cell.text3 = "行业框架 原创度100%";
            cell.text4 = "使用Python等语言进行调用，来计算和获取指标公式的结果";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "OwChart证券图形框架";
            cell.text2 = "";
            cell.text3 = "行业框架 原创度100%";
            cell.text4 = "花卷猫框架的轻量子集，全部使用C#构建界面";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-Python";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用Python来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/python.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-C++";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用C++来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-Java";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用Java来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/java.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-Html5";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用JavaScript来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/javascript.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-C#";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用C#来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cs2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-GO";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用Go来开发图形和逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/go.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-R";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，使用R语言来开发逻辑";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/r.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫CTP-Min";
            cell.text2 = "";
            cell.text3 = "行业框架 整合型";
            cell.text4 = "国内官方接口封装，有Win32和Linux两个版本";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/cpp2.png";
            cell.linkType = "7";
            row.cells.push(cell);
        }


        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫K线分析";
            cell.text2 = "";
            cell.text3 = "行业应用 原创度100%";
            cell.text4 = "Windows和MacOS均已上线，用于对历史K线进行各种分析";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "下载";
            cell.image = "http://www.jjmfc.com/index_files/windows.png";
            cell.linkType = "8";
            row.cells.push(cell);
        }

  if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫Python选股";
            cell.text2 = "";
            cell.text3 = "行业应用 整合型";
            cell.text4 = "终端内置功能，使用Python对K线数据进行筛选";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "8";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫平均涨跌幅";
            cell.text2 = "";
            cell.text3 = "行业应用 原创度100%";
            cell.text4 = "终端内置测试功能，计算所有品种整个历史的平均涨跌幅，相当于自定义指数";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "8";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫成交量预计";
            cell.text2 = "";
            cell.text3 = "行业应用 原创度100%";
            cell.text4 = "终端内置测试功能，在开盘不久的时候计算出全天的成交量预计值";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "8";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "金融板块数据";
            cell.text2 = "";
            cell.text3 = "行业应用 整合型";
            cell.text4 = "终端内置功能，获取各种证券金融板块的代码列表";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "8";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "研发历史";
            cell.text2 = "";
            cell.text3 = "图片和视频";
            cell.text4 = "展示花卷猫从0-1的全过程";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫多端互动";
            cell.text2 = "";
            cell.text3 = "基础功能 原创度100%";
            cell.text4 = "家庭或公司内私有部署的消息网络，支持不同平台和语言间互通";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍1";
            cell.linkText2 = "介绍2";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫浏览器";
            cell.text2 = "";
            cell.text3 = "基础功能 整合型";
            cell.text4 = "多平台综合浏览器，附带2万多个网页的收集整理和分类";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "花卷猫代码编辑器";
            cell.text2 = "";
            cell.text3 = "基础功能 原创度100%";
            cell.text4 = "完全自研的多平台代码编辑器，包括Windows、MacOS、iOS、Android四个版本";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "自研编程语言";
            cell.text2 = "";
            cell.text3 = "基础功能 原创度100%";
            cell.text4 = "多平台FCScript引擎，用于扩展框架配置，以及多平台互通操作";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "自研内存数据库";
            cell.text2 = "";
            cell.text3 = "基础功能 原创度100%";
            cell.text4 = "多平台数据库引擎，用于在服务端或客户端快速的保存数据";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "自研Html引擎";
            cell.text2 = "";
            cell.text3 = "基础功能 原创度100%";
            cell.text4 = "多平台图形解析和渲染，使用可视化来快速生成界面";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "介绍";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "联系方式";
            cell.text2 = "";
            cell.text3 = "微信号等";
            cell.text4 = "花卷猫从未授权过任何代理商、机构组织，以及除花卷猫正式工商登记的人员外进行宣传推广和销售。对于他人不正确或不恰当的宣传，将会进行严厉制止和相关追责。";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "打开";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }

        if (true) {
            let row = new facecat.FCGridRow();
            gList.rows.push(row);
            let cell = new facecat.FCGridCell();
            cell.font = "Default,16";
            cell.colSpan = 1;
            cell.rowSpan = 1;
            cell.text1 = "沪ICP备2021003600号 热线电话：15921975627";
            cell.text2 = "";
            cell.text3 = "关于";
            cell.text4 = "";
            cell.link = "";
            cell.link2 = "";
            cell.linkText1 = "";
            cell.linkText2 = "";
            cell.linkType = "1";
            row.cells.push(cell);
        }
        facecat.updateViewDefault(gPaint.views);
        facecat.invalidate(gPaint);
    })
  }
})
